package com.sky.vo;

import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.sky.entity.DishFlavor;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
/**
 * 加上 @JsonIgnoreProperties({"handler"}) 不会影响你正常需要的数据，只会让 Jackson 在序列化时忽略掉 MyBatis 代理对象中多出来的 handler 字段。
 *  详细解释
 *  handler 字段是 MyBatis 为了实现懒加载（延迟加载）而在代理对象中添加的一个内部字段，不是你业务数据的一部分。
 *  你在 VO（如 DishVO）上加 @JsonIgnoreProperties({"handler"})，只是告诉 Jackson：“序列化时不要管 handler 这个字段”。
 *  你定义在 VO 里的字段（比如 id、name、flavors 等）都不会受影响，这些字段依然会被正常序列化和返回给前端。
 *
 *  总结
 * @JsonIgnoreProperties({"handler"}) 只影响 MyBatis 代理对象的内部字段，不影响你定义的业务字段。
 * 你的接口返回数据不会变少，也不会丢失你需要的内容。
 */
@JsonIgnoreProperties({"handler"})
public class DishVO implements Serializable {

    private Long id;
    //菜品名称
    private String name;
    //菜品分类id
    private Long categoryId;
    //菜品价格
    private BigDecimal price;
    //图片
    private String image;
    //描述信息
    private String description;
    //0 停售 1 起售
    private Integer status;
    //更新时间
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    //分类名称
    private String categoryName;
    //菜品关联的口味
    @TableField(exist = false)
    @Builder.Default
    private List<DishFlavor> flavors = new ArrayList<>();

    //private Integer copies;
}
